package codigo;

import java.util.ArrayList;

import desa.Vector;
import codigo.ObjetoObstaculo;
import desa.Posicion;
public class Ciudad {

private int ancho;
private int alto;
private ArrayList<ObjetoMovil> coleccionObjetosMoviles;
private ArrayList<ObjetoObstaculo> coleccionObstaculos;

public Ciudad(int ancho, int alto) {


	this.ancho = ancho;
	this.alto = alto;
	this.coleccionObjetosMoviles = new ArrayList<ObjetoMovil>();
	this.coleccionObstaculos = new ArrayList<ObjetoObstaculo>();
}

public int getAlto() {
	return alto;
	}

public void setAlto(int alto) {
	this.alto = alto;
	}

public int getAncho() {
	return ancho;
	}

public void setAncho(int ancho) {
	this.ancho = ancho;
	}
	
public void agregarObjetoMovil(ObjetoMovil objetoMovil) {
	this.coleccionObjetosMoviles.add(objetoMovil);
}

public ObjetoMovil extraerObjetoMovil(ObjetoMovil objetoMovil){
	int indexObjetoMovil = this.coleccionObjetosMoviles.indexOf(objetoMovil);
	return this.coleccionObjetosMoviles.get(indexObjetoMovil);
}

public void agregarObstaculo(ObjetoObstaculo objetoObstaculo) {
	this.coleccionObstaculos.add(objetoObstaculo);
}

public ObjetoObstaculo extraerObstaculo(ObjetoObstaculo objetoObstaculo){
	int indexObjetoObstaculo = this.coleccionObstaculos.indexOf(objetoObstaculo);
	return this.coleccionObstaculos.get(indexObjetoObstaculo);
}

public boolean estaEnLosLimites(Vector punto) {
if(Math.abs(punto.getX()) >= (this.ancho) || Math.abs(punto.getY()) >= (this.alto))
	return false;
return true;
}

public boolean estaDentroDeLimitesEnSiguientePosicion(ObjetoMovil objetoMovil) {
	Posicion siguientePosicion = objetoMovil.getSiguientePosicion();
	return this.estaEnLosLimites(siguientePosicion);
}

public boolean hayObstaculoEnSiguientePosicion(ObjetoMovil objetoMovil){
	int tamanioColeccionObstaculos = coleccionObstaculos.size();
	boolean encontroIgualPosicion = false;
	int i = 0;

	while ((i < tamanioColeccionObstaculos) && (!encontroIgualPosicion)){
		encontroIgualPosicion = coleccionObstaculos.get(i).posicion.esIgual(objetoMovil.getSiguientePosicion());
		}
	return encontroIgualPosicion;
}

/*
private void buscarColisionesConObstaculos(){
	int tamanioColeccionObjetosMoviles = coleccionObjetosMoviles.size();
	
	for(int i = 0; i < tamanioColeccionObjetosMoviles; i++){
			if (estaDentroDeLimitesEnSiguientePosicion (coleccionObjetosMoviles.get(i))) &&
			(!hayObstaculoEnSiguientePosicion (coleccionObjetosMoviles.get(i)))
			coleccionObjetosMoviles.get(i).avanzar();
		}
	
}*/

private void verificarColisionAFuturo(ObjetoPosicionable objetoPosicionable, ObjetoPosicionable objetoPosicionable2) {
	
}


}
